package com.atguigu.gmall.product.service;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmall.model.product.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface ManageService {

    //查询所有一级分类数据
    List<BaseCategory1> getCategory1();

    //查询所有二级分类数据
    List<BaseCategory2> getCategory2(Long category1Id);
    //查询所有三级分类数据
    List<BaseCategory3> getCategory3(Long category2Id);
    //根据分类Id 获取平台属性集合
    List<BaseAttrInfo> getAttrInfoList(Long category1Id, Long category2Id, Long category3Id);
    //保存平台属性 and 更新平台属性和平台属性值
    void saveAttrInfo(BaseAttrInfo baseAttrInfo);
    //根据平台属性Id 获取到平台属性值集合
    List<BaseAttrValue> getAttrValueList(Long attrId);

    //根据平台属性Id 获取到平台属性值集合 为了更加符合业务逻辑：可以从 平台属性 中获取平 台属性值 集合！
    BaseAttrInfo getBaseAttrInfo(Long attrId);
    //查询SPU属性数据
    IPage getSpuInfoPage(Page iPage, SpuInfo spuInfo);
    //商品管理 获取销售属性数据
    List<BaseSaleAttr> getBaseSaleAttrList();

    //保存spu
    void saveSpuInfo(SpuInfo spuInfo);

    //根据spuId 获取spuImage 集合
    List<SpuImage> getSpuImageList(Long spuId);

    //根据spuId 查询销售属性
    List<SpuSaleAttr> getSpuSaleAttrList(Long spuId);

    //保存SkuInfo
    void savaSkuInfo(SkuInfo skuInfo);

    //sku分页列表
    IPage<SkuInfo> getList(Page<SkuInfo> skuInfoPage);

    //上架
    void onSale(Long skuId);

    //下架
    void cancelSale(Long skuId);

    //对象数据  被 service-item 调用 形成 map 集合
    //根据skuId 查询skuInfo 获取sku基本信息与图片信息
    //在service-product 微服务中获取数据！
    //1.	获取skuInfo 基本信息+ skuImage图片列表！
    //获取商品的基本信息：skuName, defaultImage... skuInfo 实体类！
    //获取skuImagList ：
    SkuInfo getSkuInfo(Long skuId);

    //获取价格数据！
    //select price from sku_info where id = skuId;
    BigDecimal getPrice(Long skuId);

    //获取分类数据！
    //商品详情页面中有且只有一个参数 传递进来 skuId!
    BaseCategoryView getCategoryName (Long category3Id);

    //获取销售属性 和 销售属性值 以及 锁定  提前分析 数据库表 得知
    //需要传入skuId and spuId 返回类型为 SpuSaleAttr
    List<SpuSaleAttr> getSpuSaleAttrListById (Long skuId,Long spuId);

    //  根据spuId 获取数据！ 实现点击属性 跳转 新的skuId的功能
    Map getAttrValueIdAndValueIdToMap (Long spuId);

    //获取商品海报！根据spuId 获取
    //每一个spuId 对应的skuId 的商品海报都是一样的
    List<SpuPoster> getSpuPosterList (Long spuId);

    //获取商品的规格与包装！
    // 取商品的平台属性数据，作为SPU的规格与包装的参数列表！
    // 本质：根据skuId 来获取平台属性+平台属性值！
    List<BaseAttrInfo> getBaseAttrInfoList(Long skuId);

    /*
    * 获取首页数据
    * */
    List<JSONObject> getBaseCategoryList();

    //通过品牌id查询品牌信息
    BaseTrademark getTrademarkByTmId(Long tmId);
}
